package com.gamefx.engine1.managers
{
	public class SoundManager
	{
		private static var _impl:ISoundManager;
		
		private static function get impl():ISoundManager
		{
			if (_impl == null)
			{
				_impl = SoundManagerImpl.getInstance();
			}
			
			return _impl;
		}
		
		
		/**
		 * 是否静音(全局)
		 * @return 
		 */
		public static function get soundMuted():Boolean
		{
			return impl.soundMuted;
		}
		
		/**
		 * 设置是否静音(全局)
		 * @param value
		 */
		public static function set soundMuted(value:Boolean):void
		{
			impl.soundMuted = value;
		}
		
		/**
		 * 全局音量
		 * @return 
		 */
		public static function get soundVolume():Number
		{
			return impl.soundVolume;
		}
		
		/**
		 * 全局音量
		 * @param value
		 */
		public static function set soundVolume(value:Number):void
		{
			impl.soundVolume = value;
		}
		
		
		
		/**
		 * 播放一个外部 MP3 文件
		 * <p>对同一个url调用play时，SoundManager会自动对同一Sound对象创建多份SoundChannel，以节省内存开支。<br>
		 * 当所有对该Sound进行引用的SoundChannel播放完成(或手工调用SoundManager.stop)时，Sound对象会被自动销毁。<br>
		 * 从而省去您对内存管理的工作。</p>
		 * 
		 * @param url
		 * @param starTime
		 * @param loops
		 * @return 分配到的SoundChannel的ID，您可以通过SoundManager.stop来停止这个SoundChannel中声音
		 */
		public static function play(url:String, starTime:Number=0, loops:uint=0):uint
		{
			return impl.play(url, starTime, loops);
		}
		
		/**
		 * 停止在某个声道中播放声音。
		 * @param id 调用SoundManager.play时得到的SoundChannel的ID
		 */
		public static function stop(id:uint):void
		{
			impl.stop(id);
		}
	}
}